<?php

declare(strict_types=1);

namespace app\model\common;

use app\libs\token\Token;
use app\libs\token\driver\RedisToken;

/**
 * 模型使用Token的trait
 * 
 * 使用时候必须提供一个 protected static $traitTokenConfig = ['class' => Token::class]; 属性
 * 
 * 例子:
 * 在 app/model/User 中
	// 使用Token
    use TokenTrait;
    protected static $traitTokenConfig = [
        'class' => RedisToken::class,
        'name' => 'User',
        'expire_time' => 7200,
    ];
 */
trait TokenTrait
{
	/** @var Token|RedisToken */
	protected static $trait_token_app;

	/**
	 * 获取Token实例
	 * @return Token|RedisToken
	 */
	public static function getTokenApp()
	{
		if (!static::$trait_token_app) {
			// 这里编辑器提示错误，忽略即可
			$className = static::$traitTokenConfig['class'];
			static::$trait_token_app = new $className(static::$traitTokenConfig);
		}
		return static::$trait_token_app;
	}
}
